Operation
GPIO21 → ENABLE
GPIO22 → DIR
GPIO23 → STEP
At power-up:
ENABLE = HIGH
DIR = LOW
Generate 200 Hz step pulses for 5 seconds
Then:
ENABLE = LOW
Wait 1 second
Then :
ENABLE = HIGH
DIR = HIGH
Generate 500 Hz step poulses for 5 seconds
ENABLE = LOW
Wait 1 second
Then :
ENABLE = HIGH
DIR = LOW
Generate 500 Hz step poulses for 5 seconds

GO TO START LOOP

/*
  ESP32 Stepper Pulse Sequence

  GPIO21 -> ENABLE
  GPIO22 -> DIR
  GPIO23 -> STEP

  Sequence:
  1. ENABLE HIGH, DIR LOW,  200 Hz for 5 sec
  2. ENABLE LOW, wait 1 sec
  3. ENABLE HIGH, DIR HIGH, 500 Hz for 5 sec
  4. ENABLE LOW, wait 1 sec
  5. ENABLE HIGH, DIR LOW,  500 Hz for 5 sec
  6. Repeat forever
*/

const byte ENABLE_PIN = 21;
const byte DIR_PIN    = 22;
const byte STEP_PIN   = 23;

//------------------------------------------------------------
// Generate step pulses
//------------------------------------------------------------
void runStepper(uint16_t frequency, uint32_t runTime_ms)
{
  uint32_t halfPeriod_us = 1000000UL / (frequency * 2UL);
  uint32_t pulses = (uint32_t)frequency * runTime_ms / 1000UL;

  for (uint32_t i = 0; i < pulses; i++)
  {
    digitalWrite(STEP_PIN, HIGH);
    delayMicroseconds(halfPeriod_us);

    digitalWrite(STEP_PIN, LOW);
    delayMicroseconds(halfPeriod_us);
  }
}

//------------------------------------------------------------
void setup()
{
  pinMode(ENABLE_PIN, OUTPUT);
  pinMode(DIR_PIN, OUTPUT);
  pinMode(STEP_PIN, OUTPUT);

  digitalWrite(ENABLE_PIN, LOW);
  digitalWrite(DIR_PIN, LOW);
  digitalWrite(STEP_PIN, LOW);
}

//------------------------------------------------------------
void loop()
{
  //==========================================================
  // Step 1
  // ENABLE HIGH
  // DIR LOW
  // 200 Hz for 5 seconds
  //==========================================================
  digitalWrite(ENABLE_PIN, HIGH);
  digitalWrite(DIR_PIN, LOW);
  runStepper(200, 5000);

  // Disable for 1 second
  digitalWrite(ENABLE_PIN, LOW);
  delay(1000);

  //==========================================================
  // Step 2
  // ENABLE HIGH
  // DIR HIGH
  // 500 Hz for 5 seconds
  //==========================================================
  digitalWrite(ENABLE_PIN, HIGH);
  digitalWrite(DIR_PIN, HIGH);
  runStepper(500, 5000);

  // Disable for 1 second
  digitalWrite(ENABLE_PIN, LOW);
  delay(1000);

  //==========================================================
  // Step 3
  // ENABLE HIGH
  // DIR LOW
  // 500 Hz for 5 seconds
  //==========================================================
  digitalWrite(ENABLE_PIN, HIGH);
  digitalWrite(DIR_PIN, LOW);
  runStepper(500, 5000);

  // Disable for 1 second before repeating
  digitalWrite(ENABLE_PIN, LOW);
  delay(1000);

  // Loop repeats automatically
}
